/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;

import Utilidades.ExibirMensagens;
import Utilidades.VariaveisEstaticas;
import dominio.*;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;

import javax.faces.bean.SessionScoped;
import negocio.ManterMateriaPrimaNegocio;

/**
 *
 * @author huliane
 * Classe usada para receber e fazer requisições com o servidor.
 */

@ManagedBean
@SessionScoped
public class ManterMateriaPrimaBean {

    private ManterMateriaPrimaNegocio manterMateriaPrimaNegocio;
    private MateriaPrima materiaPrima;
    private String codigo;
    private String preco;
    private boolean exibeTabela;
   /** Estrutura de dados usada para armazenar as materiaprimas contidas no banco de dados<br>
     *  Será usada para exibir a lista das materiaprimas na tela.
    */
    private List<MateriaPrima> materiaPrimas;
    /** Variável que irá receber o valor false quando o usuário selecionar alguma materiaPrima.*/
    private boolean naoSelecionouMateriaPrima = true;

    public ManterMateriaPrimaBean() {
        inicializarAtributos();
    }
    /**
     * Método que inicializa todos os atributos do ManterMateriaprimaBean
     */

    
    private void inicializarAtributos() {
        manterMateriaPrimaNegocio = new ManterMateriaPrimaNegocio();
        materiaPrima = new MateriaPrima();
        materiaPrimas = new ArrayList<MateriaPrima>();
        codigo = "";
        preco = "";
        exibeTabela = false;
    }

    /**
     * Método que irá chamar o método create() da classe ManterMateriaprimaNegócio.
     *
     */

    public void create() {
        materiaPrima.setCodigo(Integer.parseInt(codigo));
        materiaPrima.setPreco(Double.parseDouble(preco));
        /** Variável usada para receber o retorno do método create() da classe ManterMateriaprimaNegócio.<br>
         * Esse retorno é usado para saber se a materiaPrima  foi armazenado ou não, distinguindo assim os possíveis erros.
         */
        int res = manterMateriaPrimaNegocio.create(materiaPrima);
       /** switch usado para mostrar a mensagem de inserção ao usário de acordo com o valor da
         * variável res.
         */
        exibeTabela = false;
        switch (res) {
            case VariaveisEstaticas.SUCESSO:
                ExibirMensagens.exibirMensagens(VariaveisEstaticas.INFORMATIVA, "SUCESSO", new Integer[]{new Integer(3), new Integer(0)});
                inicializarAtributos();

                break;
            case VariaveisEstaticas.ERRO_DUPLICACAO:
                ExibirMensagens.exibirMensagens(VariaveisEstaticas.ERRO, "ERRO2", new Integer[]{new Integer(4), new Integer(3), new Integer(0)});
                break;
            case VariaveisEstaticas.ERRO_BD:
                ExibirMensagens.exibirMensagens(VariaveisEstaticas.ERRO, "ERRO2", new Integer[]{new Integer(6), new Integer(5), new Integer(1)});
                break;
        }
    }
/**
     * Método que irá chamar o edit da classe ManterMateriaprimaNegócio. É usado para editar uma materiaPrima.
     *
     */
    
    public void edit() {
        materiaPrima.setCodigo(Integer.parseInt(codigo));
        materiaPrima.setPreco(Double.parseDouble(preco));
        int res = manterMateriaPrimaNegocio.edit(materiaPrima);
        exibeTabela = false;
        switch (res) {
            case VariaveisEstaticas.SUCESSO:
           ExibirMensagens.exibirMensagens(VariaveisEstaticas.INFORMATIVA, "SUCESSO", new Integer[]{new Integer(3), new Integer(1)});

                naoSelecionouMateriaPrima = true;   // Caso ele consiga excluir uma materiaPrima, então essa variável irá receber true para desabilitar o botão.
               
                inicializarAtributos();
                break;

            case VariaveisEstaticas.ERRO_DUPLICACAO:
               ExibirMensagens.exibirMensagens(VariaveisEstaticas.ERRO, "ERRO2", new Integer[]{new Integer(4), new Integer(3), new Integer(0)});
                break;
            case VariaveisEstaticas.ERRO_BD:
               ExibirMensagens.exibirMensagens(VariaveisEstaticas.ERRO, "ERRO2", new Integer[]{new Integer(6), new Integer(5), new Integer(1)});
                break;
        }
    }

 /**
     * Método que irá chamar o destroy() da classe manterMateriaPrimaNegocio, será chamado para excluir uma materiaPrima.
     *
     */
    public void destroy() {
        int res = manterMateriaPrimaNegocio.destroy(materiaPrima);
        exibeTabela = false;
        switch (res) {
            case VariaveisEstaticas.SUCESSO:
                ExibirMensagens.exibirMensagens(VariaveisEstaticas.INFORMATIVA, "SUCESSO", new Integer[]{new Integer(3), new Integer(2)});

                naoSelecionouMateriaPrima = true;   // Caso ele consiga excluir a materiaPrima, então essa variável irá receber true para desabilitar o botão.

                inicializarAtributos();
                
                break;
            case VariaveisEstaticas.ERRO_BD:
               ExibirMensagens.exibirMensagens(VariaveisEstaticas.ERRO, "ERRO2", new Integer[]{new Integer(6), new Integer(5), new Integer(1)});
                break;
        }
    }

   /** Método que tem a função de buscar todos as materiaprimas no BD e armazena-los na estrutura produtos*/
    public void findMateriaprimaEntities() {
        exibeTabela = true;
        materiaPrimas = manterMateriaPrimaNegocio.findMateriaprimaEntities();

    }
 /**Métodos get e set correspondentes ao atributos */
    public MateriaPrima getMateriaprima() {
        return materiaPrima;
    }

    public void setMateriaPrima(MateriaPrima materiaPrima) {
        this.materiaPrima = materiaPrima;
    }

    public List<MateriaPrima> getMateriaPrimas() {
        return materiaPrimas;
    }

    public void setMateriaPrimas(List<MateriaPrima> materiaPrimas) {
        this.materiaPrimas = materiaPrimas;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getPreco() {
        return preco;
    }

    public void setPreco(String preco) {
        this.preco = preco;
    }

    public boolean isExibeTabela() {
        return exibeTabela;
    }

    public void setExibeTabela(boolean exibeTabela) {
        this.exibeTabela = exibeTabela;
    }

    public boolean isNaoSelecionouMateriaPrima() {
        return naoSelecionouMateriaPrima;
    }

    public void setNaoSelecionouMateriaPrima(boolean naoSelecionouMateriaPrima) {
        this.naoSelecionouMateriaPrima = naoSelecionouMateriaPrima;
    }
}


